package com.diandi.ddsb.manager;

import com.diandi.ddsb.bean.Role;
import com.diandi.ddsb.bean.RoleResourceRef;
import com.diandi.ddsb.vo.RoleMangerDto;
import com.diandi.ddsb.vo.RoleMangerVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;


/**
 * 角色管理
 */
public interface RoleManager {

    /**
     * 插入角色
     *
     * @return
     */
    int insertRole(Role role);


    /**
     * 批量添加角色与资源关联关系
     */
    void batchInsertRoleResRef(List<RoleResourceRef> ltRoleResourceRef);

    /**
     * 根据角色名称查询角色信息
     */
    List<RoleMangerDto> queryRoleInfoByRoleName(@Param(value = "roleName") String roleName);


    /**
     * 更新角色
     *
     * @return
     */
    int updateRole();

    /**
     * HEAD 获取资源列表
     *
     * @return
     */
    List<Map> getResourceList();

    /**
     * 获取所有角色
     *
     * @return
     */
    List<Role> findAllRole();

    /**
     * 找到根角色
     *
     * @return
     */
    Role findRootRole(long rootParentId);

    /**
     * 找到当前节点下的所有子节点
     *
     * @param roleId
     * @return
     */
    List<Role> findAllChildrenById(long roleId);

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    RoleMangerVo findById(long id);

    /**
     * 根据名称查询
     *
     * @return
     */
    Role findByRoleName(String roleName);

    /**
     * 更新全路径
     *
     * @param id
     * @param fullPath
     * @return
     */
    void updateFullPath(long id, String fullPath);

    /**
     * @param roleName
     * @return
     */
    Role findByRoleNameBesideSelf(String roleName, long id);

    /**
     * 更新role
     *
     * @param role
     */
    void updateRole(Role role);

    /**
     * 删除
     *
     * @param id
     */
    void delete(long id);

    /**
     * 根据id查找父角色
     *
     * @return
     */

    Role findParentById(long id);

    /**
     * 获取系统管理员角色
     *
     * @return
     */
    RoleMangerVo getAdminRole();

    Integer queryAdminRoleCount(long roleId);

}
